package ljl.codetop300;

import java.util.LinkedList;
import java.util.Queue;

public class _225_queue_for_stack {

  /**
   * 用队列实现栈：
   * 1 2 3
   * 都进一个，然后取的时候，in 这个 queue 留一个，其他的出去；下次重复这个操作
   */
  static class MyStack {
    Queue<Integer> queue1 = new LinkedList<>();
    Queue<Integer> queue2 = new LinkedList<>();

    /**
     * 还有个单队列解法，先入队，然后把之前 n 个元素重新入队，形成一个栈的顺序
     *
     * int n = q.size();
     * q.offer(x);
     * while (n-- > 0) q.offer(q.poll());
     */
    public void push(int x) {
      queue2.offer(x);
      while (!queue1.isEmpty()) {
        queue2.offer(queue1.poll());
      }
      Queue<Integer> temp = queue1;
      queue1 = queue2;
      queue2 = temp;
    }

    public int pop() {
      return queue1.poll();
    }

    public int top() {
      return queue1.peek();
    }

    public boolean empty() {
      return queue1.isEmpty();
    }
  }

}
